#include "widget.h"
#include "ui_widget.h"
#include"widget.h"
#include<QPainter>
#include<QPushButton>
#include"Boxgame.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    setFixedSize(10*64,10*64);
    pBox=new BoxGame;
    pMap=new QPainter(this);
    gameEnded = false; // 初始化游戏结束状态

    // 创建重新开始按钮
    QPushButton *restartButton = new QPushButton("Restart", this);
    // 将按钮连接到槽函数
    connect(restartButton, &QPushButton::clicked, this, &Widget::restartGame);

    // 创建退出游戏按钮
    quitButton = new QPushButton("Quit Game", this);
    quitButton->move(560, 620);//设定位置
    // 连接退出游戏按钮的clicked信号到quitGame槽函数
    connect(quitButton, &QPushButton::clicked, this, &Widget::quitGame);

    // 连接 BoxGame 的 gameFinished() 信号到 showGameOverMessage() 槽函数
    connect(pBox, &BoxGame::gameFinished, this, [=]() {
        if (!gameEnded) {
            gameEnded = true; // 标记游戏已结束
            showGameOverMessage(); // 弹出游戏结束提示
        }
    });
}

Widget::~Widget()
{
    delete ui;
}

void Widget::keyPressEvent(QKeyEvent *event)
{
    pBox->keyDown(event);
    if (pBox->gameOver() && !gameEnded) {
        gameEnded = true; // 标记游戏已结束
        showGameOverMessage(); // 弹出游戏结束提示
    }
    if(pBox->gameOver()){
        this->close();
    }
}
void Widget::quitGame()
{
    showGameOverMessage();// 显示游戏结束信息
    QApplication::quit(); //退出游戏，关闭应用程序
}

void Widget::paintEvent(QPaintEvent *event)
{
    Q_UNUSED(event);
    pMap->begin(this);
    pBox->drawMap(pMap);
    pMap->end();
    update();
}

GameWindow::GameWindow(QWidget *parent) :
    QWidget(parent)
{
    // 游戏窗口的初始化和逻辑实现
}

GameWindow::~GameWindow()
{
    // 清理资源，如需要
}

void Widget::restartGame()
{
    // 重置游戏状态和变量
    pBox->resetGame();
    // 更新游戏界面
    update();
}
void Widget::showGameOverMessage() {
    QMessageBox::information(this, "Game Over", "游戏结束！");
}
